Recording
with a Waveform-Audio Device
The following
example opens a waveform-audio device with a new file, records for the
specified time, plays the recording, and prompts the user to save the recording
if desired.
// Uses the MCI_OPEN, MCI_RECORD, and MCI_SAVE
commands to record and
// save a waveform-audio file. Returns 0L if
successful; otherwise,
// it returns an MCI error code.
DWORD recordWAVEFile(DWORD dwMilliSeconds)
{
UINT
wDeviceID;
DWORD
dwReturn;
MCI_OPEN_PARMS mciOpenParms;
MCI_RECORD_PARMS mciRecordParms;
MCI_SAVE_PARMS
mciSaveParms;
MCI_PLAY_PARMS mciPlayParms;
// Open a
waveform-audio device with a new file for recording.
mciOpenParms.lpstrDeviceType = "waveaudio";
mciOpenParms.lpstrElementName = "";
if
(dwReturn = mciSendCommand(0, MCI_OPEN,
MCI_OPEN_ELEMENT | MCI_OPEN_TYPE,
(DWORD)(LPVOID)
&mciOpenParms))
{
//
Failed to open device; don't close it, just return error.
return
(dwReturn);
}
// The
device opened successfully; get the device ID.
wDeviceID
= mciOpenParms.wDeviceID;
// Begin
recording and record for the specified number of
//
milliseconds. Wait for recording to complete before continuing.
// Assume
the default time format for the waveform-audio device
//
(milliseconds).
mciRecordParms.dwTo = dwMilliSeconds;
if
(dwReturn = mciSendCommand(wDeviceID, MCI_RECORD,
MCI_TO
| MCI_WAIT, (DWORD)(LPVOID) &mciRecordParms))
{
mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);
return
(dwReturn);
}
// Play
the recording and query user to save the file.
mciPlayParms.dwFrom = 0L;
if
(dwReturn = mciSendCommand(wDeviceID, MCI_PLAY,
MCI_FROM | MCI_WAIT, (DWORD)(LPVOID) &mciPlayParms))
{
mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);
return
(dwReturn);
}
if (MessageBox(hMainWnd,
"Do you want to save this recording?",
"", MB_YESNO) == IDNO)
{
mciSendCommand(wDeviceID,
MCI_CLOSE, 0, NULL);
return
(0L);
}
// Save
the recording to a file named TEMPFILE.WAV. Wait for
// the
operation to complete before continuing.
mciSaveParms.lpfilename = "tempfile.wav";
if
(dwReturn = mciSendCommand(wDeviceID, MCI_SAVE,
MCI_SAVE_FILE | MCI_WAIT, (DWORD)(LPVOID) &mciSaveParms))
{
mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);
return
(dwReturn);
}
return
(0L);
}